<template>
  <a-radio-group v-if="tagType=='radio'" @change="handleInput" :value="getValueSting" :disabled="disabled">
    <a-radio v-for="(item, key) in dictOptions" :key="key" :value="item.value">{{ item.text }}</a-radio>
  </a-radio-group>

  <a-radio-group v-else-if="tagType=='radioButton'"  buttonStyle="solid" @change="handleInput" :value="getValueSting" :disabled="disabled">
    <a-radio-button v-for="(item, key) in dictOptions" :key="key" :value="item.value">{{ item.text }}</a-radio-button>
  </a-radio-group>

  <a-select v-else-if="tagType=='select'" :getPopupContainer = "getPopupContainer" :placeholder="placeholder" :disabled="disabled" :value="getValueSting" @change="handleInput">
    <a-select-option value="">{{placeholder ? placeholder : '请选择'}}</a-select-option>
    <a-select-option v-for="(item, key) in dictOptions" :key="key" :value="item.value">
      <span style="display: inline-block;width: 100%" :title=" item.text || item.label ">
        {{ item.text || item.label }}
      </span>
    </a-select-option>
  </a-select>
</template>

<script>
import {ajaxGetDictItems,getDictItemsFromCache} from '@/api/api'
import { excludeDict, filterDict } from '@comp/dict/JDictSelectUtil'

export default {
  name: "JDictSelectTag",
  props: {
    dictCode: String,
    placeholder: String,
    triggerChange: Boolean,
    disabled: Boolean,
    value: [String, Number],
    valueExclude: [String, Array],
    valueText: [String, Array],
    isLike:  {
      type: Boolean,
      default: false,
      required: false
    },
    type: String,
    getPopupContainer:{
      type: Function,
      default: (node) => node.parentNode
    }
  },
  data() {
    return {
      dictOptions: [],
      tagType:""
    }
  },
  watch:{
    dictCode:{
      immediate:true,
      handler() {
        this.initDictData()
      },
    }
  },
  created() {
    // console.log(this.dictCode);
    if(!this.type || this.type==="list"){
      this.tagType = "select"
    }else{
      this.tagType = this.type
    }
    //获取字典数据
    // this.initDictData();
  },
  computed: {
    getValueSting(){
      // update-begin author:wangshuai date:20200601 for: 不显示placeholder的文字 ------
      // 当有null或“” placeholder不显示
      return this.value != null ? this.value.toString() : '';
      // update-end author:wangshuai date:20200601 for: 不显示placeholder的文字 ------
    },
  },
  methods: {
    initDictData() {
      let that = this
      if (this.dictCode){
        //优先从缓存中读取字典配置
        if(getDictItemsFromCache(this.dictCode)){
          this.dictOptions = getDictItemsFromCache(this.dictCode);
          that.filterOptions()
          return
        }
        //根据字典Code, 初始化字典数组
        ajaxGetDictItems({dictCode: this.dictCode}).then((res) => {
          if (res.success) {
//                console.log(res.result);
            this.dictOptions = res.result;
            that.filterOptions()
          }
        })
      }
    },
    handleInput(e) {
      let val;
      if(this.tagType=="radio"){
        val = e.target.value
      }else{
        val = e
      }
      console.log(val);
      if(this.triggerChange){
        this.$emit('change', val);
      }else{
        this.$emit('input', val);
      }
    },
    setCurrentDictOptions(dictOptions){
      this.dictOptions = dictOptions
      this.filterOptions()
    },
    getCurrentDictOptions(){
      return this.dictOptions
    },
    filterLikeOptions(){
      let that = this
      if (that.isLike){
        for (let i = 0; i < that.options.length; i++) {
          that.options.value = "*" + that.options.value + "*"
        }
      }
    },
    filterOptions(){
      if (this.valueText){
        this.dictOptions = filterDict(this.dictOptions, this.valueText)
      } else if (this.valueExclude){
        this.dictOptions = excludeDict(this.dictOptions, this.valueExclude)
      }
      this.filterLikeOptions()
    }
  }
}
</script>

<style scoped>
</style>